package com.afdor.rws.dtm;

import com.afdor.rws.annotation.extension.SPI;
import com.afdor.rws.dtm.annotation.Transaction;
import com.afdor.rws.dtm.entities.DistributedTransactionDefinition;

/**
 * 分布式事务管理器，负责管理、聚合事务信息
 *
 * @author 悭梵
 * @date Created in 2018-10-12 11:23
 */
@SPI("default")
public interface DistributedTransactionManager {



    /**
     * 创建一个根事务
     *
     * @return
     */
    DistributedTransactionDefinition generate(Transaction transaction);

    /**
     * 根据指定事务信息，创建子事物
     *
     * @param definition
     * @return
     */
    DistributedTransactionDefinition generate(Transaction transaction, DistributedTransactionDefinition definition);

    /**
     * 提交指定标识事务
     *
     * @param transactionId
     */
    void commit(String transactionId);

    /**
     * 提交指定事务
     *
     * @param definition
     */
    void commit(DistributedTransactionDefinition definition);

    /**
     * 回滚指定标识事务
     *
     * @param transactionId
     */
    void rollback(String transactionId);

    /**
     * 回滚指定事务
     *
     * @param definition
     */
    void rollback(DistributedTransactionDefinition definition);
}


